
POV:字幕又對不上音軌了,你改了好幾輪切段邏輯還是漂,然後發現真正的問題是:你根本拿不到時間戳。
第五週最後一篇談 GPU,這是雲端選型最容易「情緒化」的一題:一聽到 GPU 就想開一台大機器養著,或看到價格什麼都不敢開。我用自己真的做過的選擇,liaostudio 的 Whisper 字幕 backend,把 Cloud Run GPU 跟 GKE GPU node pool 放在同一個秤上。
Day 08 講過來龍去脈:liaostudio 的字幕時間戳會漂移。Day 08 寫的是我當時的判斷:以為是切段與靜音處理的問題,後續調整也都集中在那裡。換成自架的 Whisper GPU 引擎、拿到真實的 word timestamps 之後回頭看,那些調整其實是在繞過一個更底層的限制:當時用的轉寫路徑拿不到內部時間戳,只能靠字數比例加靜音偵測去估。
順帶一提,我當時也先查過其他轉寫 API 有沒有提供 word-level 時間戳,沒有的直接排除。這跟今天的主題無關,但說明了:選 GPU 平台之前,先確定你要的功能在那個平台上存在。
這個 backend 的形狀很清楚:
我的專案已核准 L4 配額,所以 Whisper backend 直接上 Cloud Run 掛 L4。它跟上面三點一一對上:
部署跟 Day 23 幾乎一樣,多三個旗標。L4 有硬性下限:官方文件寫明 L4 至少要 4 CPU 與 16 GiB 記憶體(建議 8 CPU 與 32 GiB),低於這個門檻部署會被拒絕(以下是示範值,不是我線上那份設定):
gcloud run deploy whisper-gpu \
--image=asia-east1-docker.pkg.dev/PROJECT_ID/agents/whisper-gpu:v1 \
--region=asia-east1 \
--gpu=1 --gpu-type=nvidia-l4 \
--cpu=4 --memory=16Gi \
--min-instances=0 --max-instances=1 \
--concurrency=1 \
--no-gpu-zonal-redundancy \
--no-allow-unauthenticated
幾個值得注意的點:--concurrency=1 讓一個 instance 一次只處理一個請求,第二個請求會排隊等(配上 --max-instances=1,也不會另開一台來接)。我這樣設是因為推論會吃滿整張卡,硬讓兩個請求併行,我目前的理解是只會互相拖慢;--no-gpu-zonal-redundancy 是關掉跨 zone 的 GPU 備援,官方文件有說明它對可用性與計費的影響。價格不寫死,以官方定價頁為準。
代價也很直接:GPU 型號與可用 region 有限,如果你的模型需要比 L4 更大的卡,這條路可能就走不通;而且 Cloud Run 不能讓多個 workload 共用同一張卡。
如果把 Whisper backend 放到 GKE,有兩種長相。Standard 是自己開一個 GPU node pool,節點你管、節點你付;Autopilot 是在 Pod 上宣告 nodeSelector: cloud.google.com/gke-accelerator: nvidia-l4 加 resources.limits: nvidia.com/gpu: 1,節點由 GKE 幫你開、按 Pod 宣告的資源計費(Day 22 提過)。下面的對照以 Standard 為主,它才是「自己養卡」的路,核心是掌控度:
nvidia.com/gpu,要共用得另外設定 time-slicing 或 MIG 這類機制(官方文件有整理,我沒實際用過)。Cloud Run 連這個選項都沒有。代價同樣直接:Standard 是為節點付錢,不是為請求付錢。 GPU node pool 開著就在計費,除非你自己縮到 0;而縮到 0 之後再拉起來,我目前的理解是要等整台機器開機、裝 driver、拉 image,比 Cloud Run 的容器冷啟動慢,但我沒量過數字。對「偶爾用」的 workload 這是雙重懲罰:閒著在燒錢,要用時又要等。Autopilot 少掉養節點這層(Pod 刪掉就不再計費),但節點等級的等待還在,共用卡也仍要自己設。
| 面向 | Cloud Run GPU(L4) | GKE Standard GPU node pool |
|---|---|---|
| 使用模式 | 偶發、request-driven | 常駐、多 workload 共用卡 |
| 閒置成本 | 縮到 0 | 節點開著就計費 |
| 冷啟動 | 容器等級,可接受 | 節點等級,我的理解是更久 |
| 掌控度 | 較低,型號與 region 受限 | 完整 |
| 硬性門檻 | L4 至少 4 CPU / 16 GiB | 要自己管 driver 與 node pool;共用卡要另外設 |
| 適合的下一步 | 維持現狀 | 出現第二個 GPU workload 要共用卡時再看 |
以我現在這個 workload 來說,結論很清楚:偶發的字幕生成,Cloud Run GPU 比較合適。 但我把 GKE 留在表上,因為決策的變數從來不是「哪個技術強」,而是「手上有幾個 GPU workload、多常用」。這兩個數字一變,答案就會變。
一個提醒:不要因為「以後可能會有很多 GPU workload」就先開 node pool。Day 20 那張清單講過,為想像中的未來付錢,通常是雲端帳單失控的起點。
明天進入第六週,把視線從 GCP 轉到 Azure,先做 AKS 對 GKE 的概念對照。
GPU 選型不是挑規格,是看你多常需要它:偶發的靠 Cloud Run GPU 縮到 0 省錢,常駐或多個 workload 要共用卡,才值得為 GKE node pool 付常駐的錢。